<template> 
<div class="app-container">
    <div class="ces-main">



      <el-form
          ref="form"
          :model="FormData"
          :inline="true"
          :rules="rules"
          label-position="right"
          label-width="120px"
        >
        
         
          <el-form-item v-if="this.StepSN == 0||this.StepSN == -999" style="height:5px">

            <el-button
              type="primary"
              size="mini"
              icon="el-icon-tickets"
              @click="confirmData(0)"
              >保存</el-button
            >
          </el-form-item>
          <el-form-item v-if="this.StepSN == 0" style="height:5px">
            <el-button
              type="primary"
              size="mini"
              icon="el-icon-check"
              @click="confirmData(1)"
              >提交</el-button
            >
          </el-form-item>

          <el-form-item v-if="this.StepSN > 0" style="height:5px">
            <el-button
              type="primary"
              size="mini"
              icon="el-icon-tickets"
              @click="confirmData(0)"
              >保存</el-button
            >
          </el-form-item>
          <el-form-item v-if="this.StepSN > 0" style="height:5px">
            <el-button
              type="primary"
              size="mini"
              icon="el-icon-check"
              @click="confirmData(3)"
              >退回上一步</el-button
            >
          </el-form-item>
          <el-form-item v-if="this.StepSN > 0" style="height:5px">
            <el-button
              type="primary"
              size="mini"
              icon="el-icon-check"
              @click="confirmData(2)"
              >审核</el-button
            >
          </el-form-item>

          <el-form-item style="height:5px">
            <el-button
              type="primary"
              size="mini"
              icon="el-icon-check"
              @click="handleClose()"
              >关闭</el-button
            >
          </el-form-item>


        </el-form>    

    <span
          style="
            text-align: center;
            font-size: 20px;
            font-weight: bold;
            display: inline-block;
            width: 100%;
            padding: 3px 0 5px 0;
          "
        >
          <span>半成品BOM</span>
          <span style="margin-left: 10px">
            <svg-icon v-if="this.FormData.Status == 0||this.FormData.Status == null" icon-class="Editing" />
            <svg-icon v-if="this.FormData.Status == 1" icon-class="ingAudit" />
            <svg-icon v-if="this.FormData.Status == 2" icon-class="Finish" />
          </span>
        </span>
        
<el-form :model="FormData" label-width="90px"  >
       <Mian-Form 
    
          ref="refFormData"
        labelWidth = '150' 
        :FormData = 'FormData'
         :tableCols = 'FormCols'
          :StepSN = 'StepSN'
        @handleOpen=""
        ></Mian-Form >
      </el-form>


 <el-form
        :inline="true"
        :model="Search"
        class="demo-form-inline"
        size="mini"
      >
      </el-form>
  
 <section class="ces-handle">
      <el-button v-if="this.StepSN == 0||this.StepSN == -999"
              type="primary"
              size="mini"
              @click="handleOpen('PrdNo')"
              icon="el-icon-tickets"
              >添加物料</el-button
            >
    </section>
    <section class="ces-handle">
                  <v-UploadOpen
                    @returnData="handleUploadOpen"
                    :UploadArr = 'UploadArr'
                  ></v-UploadOpen>
          </section>
        <ces-table 
        size='mini'
        ref="reftableData"
        :isSelection='false'
        :isIndex='true'
        :isSearch='false'
        :isHandle='true'
         :IsfunEdit='false'
        :Isfunfail='this.StepSN==0||this.StepSN == -999?true:false'
        :StepSN = this.StepSN
        :WFStepSN='WFStepSN'
        :tableData='tableData' 
        :tableCols='tableCols' 
        @handleEdit='handleEdit'
        @handleDelete="delData"
        >
        </ces-table>
        </div>


<el-main style="margin: 1px 10px">
          <span class="blueColor" style="font-size: 15px; font-weight: blod; padding: 10px"
            >审核明细：</span
          >

          <el-timeline :reverse="true" ref="ListLog" :model="ListLog">
            <el-timeline-item
              v-for="(activity, index) in ListLog"
              :key="index"
              :timestamp="activity.CreateDateTime"
            >
              {{ activity.Remark }}
            </el-timeline-item>
          </el-timeline>
        </el-main>


    <el-dialog
              v-if="dialogFormVisible"
              :visible.sync="dialogFormVisible"
              :title="人员资料"
              
              width="800px"
            >
              <el-form :model="name" label-width="80px" label-position="left">
                <v-AccountOpen
                  :ParmType="ParmType"
                  @FunRowAdd="FunrRowsAdd"
                ></v-AccountOpen>
              </el-form>
            </el-dialog>


            <el-dialog
              v-if="dialogCUSTVisible"
              :visible.sync="dialogCUSTVisible"
              :title="客户资料"
              
              width="800px"
            >
              <el-form :model="name" label-width="80px" label-position="left">
                <v-CUSTOpen
                  :ParmType="ParmType"
                  :CUSTtype='1'
                  @FunRowAdd="FunrRowsAdd"
                ></v-CUSTOpen>
              </el-form>
            </el-dialog>


               <el-dialog
              v-if="dialogPRDTVisible"
              :visible.sync="dialogPRDTVisible"
              :title="料品资料"
              
              width="900px"
            >
              <el-form :model="name" label-width="80px" label-position="left">
                <v-PRDTOpen
                  :ParmType="ParmType"
                  :Where="ProWhere"
                  :CUSTtype='1'
                  @FunRowAdd="FunrRowsAdd"
                  KeyName='PrdNo'
                ></v-PRDTOpen>
              </el-form>
            </el-dialog>


               <el-dialog
              v-if="dialogPUOrderVisible"
              :visible.sync="dialogPUOrderVisible"
              :title="采购订单资料"
              
              width="80%"
            >
              <el-form :model="name" label-width="80px" label-position="left">
                <v-PUOrderDetailOpen
                  :ParmType="ParmType"
                  :ParmName="ParmName"
                  @FunRowAdd="FunrRowsAdd"
                ></v-PUOrderDetailOpen>
              </el-form>
            </el-dialog>


</div>
</template>

<script>


//引入组件

import cesTable from "../Common//table.vue";
import SearchForm from "../Common//Search.vue";
import MianForm from "../Common//form.vue";

import { funDownload,GetTableColsData,GetFormColsData } from "@/api/Common";
import {UpdateForm,DeleteRowForm} from '@/api/MesBasic/Bom'; //更改
import vGetToolBar from "../Common/GetToolBar";
import vAccountOpen from "../Common/AccountOpen";
import vCUSTOpen from "../Common/CUSTOpen";
import vPRDTOpen from "../Common/PRDTOpen";
import vPUOrderDetailOpen from "../Mespurchase/PUOrderDetailOpen";
import vUploadOpen from "../Common/UploadOpen";
export default {

 props: {
    inputName: String,
    required: true,
  },

    data(){
         //表单查询一般分为input，下拉框，和日期，下面是下拉框时的设置下拉信息的情况，我的项目没有用到，但是留着方便看
      
        return {
        tableData:[],//表格数据
        FormData:[],//表格数据
        FormCols:[],//表头数据
        tableCols:[],//表格列数据
        StepSN: -1,
        WFStepSN:'0',
        billID:null,
        ListLog: [],
        IsfunEdit:false,
        Search: {
        // 查询条件
        total: 0, // 总记录数
        pageSize: 13, // 一页显示的记录数
        page: 1, // /当前页码
        RNO: "003", // 表编号  根据Controller中对应的表编号 //更改
        jsWhere: "", // 自定义条件     
      },
       rules: {
        ProductNo: [
          { required: true, message: "请输入物料编号", trigger: "blur" },
        ],
      },
       cities: [
        {
          value: "0",
          label: "草稿",
        },
        {
          value: "1",
          label: "审核中",
        },
        {
          value: "2",
          label: "结案",
        },
        {
          value: "3",
          label: "作废",
        },
      ],
       SearchDialog: false,
         DialogBtnMargin: 0,
         dialogVisible: false,
         dialogFormVisible: false,
         dialogCUSTVisible:false,
         dialogPRDTVisible:false,
         dialogPUOrderVisible:false,
         ParmType: "",
         ParmName:"",
         ProWhere:"",
          UploadArr: [
        { Fieldname: "PartNo", CName: "物料编号" },
        { Fieldname: "PartNamel", CName: "物料名称" },
        { Fieldname: "IDXI", CName: "类别" },
        { Fieldname: "SPC", CName: "规格" },
        { Fieldname: "UT", CName: "单位" },
         { Fieldname: "Scale", CName: "用量" },
          { Fieldname: "IsSend", CName: "是否外发" },
           { Fieldname: "FigureNo", CName: "图号" },
            { Fieldname: "SourceType", CName: "来源" },
             { Fieldname: "Remark1", CName: "备注" },
        
      ]
          
        }
    },

   components:{ //引入组件后注册组件
    cesTable, 
     SearchForm,
     MianForm,
     vAccountOpen,
     vCUSTOpen,
     vPRDTOpen,
     vPUOrderDetailOpen,
       vUploadOpen
   },
   mounted(){

     this.getTableCols()
     this.getDataList()
    
    
   },
    methods:{
        
    
      //读取列配置
        async getTableCols(){
        this.tableCols = [];
        this.FormCols=[];

        const resCols = await  GetFormColsData({InterID:"360"}); //更改
        this.FormCols=resCols.data;


        const res = await  GetTableColsData({InterID:"361"}); //更改
        this.tableCols=res.data;
                  
         },
        async getDataList() {

 
 

       if (this.inputName == null) {
        this.inputName = this.$route.query.billID;
      }
;
      const result = await UpdateForm({
        billID: this.inputName,
        IsPostBack: false,
      });

      this.FormData = result.data1.Table[0];
     
      this.tableData = result.data2.Table;
    
      this.ListLog = result.ListLog;
      this.StepSN = result.StepSN;
      
        
        
    
    },OpenFindForm() {
      //打开搜索框
      this.SearchDialog = true;
      //计算外边距
      console.log(this.$refs.searchDialog.offsetHeight);
      this.DialogBtnMargin = this.$refs.searchDialog.offsetHeight - 40;
    },async confirmData(submit) {
      // 提交数据，需要修改

        const Fresult = true;
     if (submit == 1) {

       

        let flag = this.$refs['refFormData'].validateForm(); 



        let flag1 = this.$refs['reftableData'].validateForm(); 
  

    if(flag==false||flag1==false)
     {
          this.$notify({
              title: "不能提交",
              dangerouslyUseHTMLString: true,
              message: "不可为空，不能提交",
              type: "error",
            });
            Fresult = false;
            return false;

      }

    if(this.tableData.length<=0)
    {
       this.$notify({
              title: "不能提交",
              dangerouslyUseHTMLString: true,
              message: "行没有数据，不能提交",
              type: "error",
            });
            Fresult = false;
            return false;

    }

   }
      




     if(this.FormData.ProductNo=="")
     {
       Fresult=false;
       this.$notify({
              title: "不能保存",
              dangerouslyUseHTMLString: true,
              message: "产品不可为空，不能保存",
              type: "error",
            });
             return false;
     }


 let options="保存中...";

if(submit == 1)
{
  options="提交中...";
}else if(submit == 2)
{
   options="审批中...";
}else if(submit == 3)
{
   options="退回中...";
}

  const loading = this.$loading({
          lock: true,
          text: options,
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
        });

      if (Fresult) {
        const result = await UpdateForm({
          HeadDate: JSON.stringify(this.FormData),
          BodyDate: JSON.stringify(this.tableData),
          billID: this.FormData.ProductNo,
          IsPostBack: true,
          submit: submit,
        });
      loading.close();
        this.FormData = result.data1.Table[0];
        this.tableData = result.data2.Table;
        this.ListLog = result.ListLog;
        this.StepSN = result.StepSN;
        if (result.code === 20000) {
        
          this.dialogVisible = false;
          this.$notify({
            title: result.msg,
            dangerouslyUseHTMLString: true,
            message: "",
            type: "success",
          });
        
          this.$router.push({
        path: "/MesBasic/BomPartDetailForm",
        query: { billID: this.FormData.ProductNo, IsPostBack: false },
      });
        } else {
          this.$notify({
            title: result.msg,
            dangerouslyUseHTMLString: true,
            message: "",
            type: "error",
          });
        }
      }else
      {

      }
    },
    handleOpen(name)

    {
      
     
      if(name=="MoneymanName")
      {
      this.ParmType = "MoneymanName"; //传入参数
      this.dialogFormVisible = true;
      }else if(name=="CustomerName")
      {
         this.ParmType = "CustomerName"; //传入参数
        this.dialogCUSTVisible = true;
      }else if(name=="PrdNo")
      {
      
       this.ProWhere=" and IDXI<>'A01'";
        this.ParmType = "PrdNo"; //传入参数
        this.dialogPRDTVisible = true;
      }else if(name=="ProductNo")
      {
      
       this.ProWhere=" and IDXI='A01'";
        this.ParmType = "ProductNo"; //传入参数
        this.dialogPRDTVisible = true;
      }

    },
    FunrRowsAdd: function (Rows, ParmType) {
      //添加人员

      this.multipleTable = Rows[0];

      if (ParmType == "MoneymanName") {
        this.FormData.Moneyman = this.multipleTable.UserCode;
        this.FormData.MoneymanName = this.multipleTable.UserName;
        this.dialogFormVisible = false;
      }else if (ParmType == "CustomerName") {
        this.FormData.CustomerCode = this.multipleTable.CUS_NO;
        this.FormData.CustomerName = this.multipleTable.NAME;
         this.dialogCUSTVisible = false;
      }else if (ParmType == "ProductNo") {
        this.FormData.ProductNo = this.multipleTable.PrdNo;
        this.FormData.ProductName = this.multipleTable.PrdName;
        this.FormData.SPC = this.multipleTable.SPC;
         this.dialogPRDTVisible = false;
      }else if(ParmType == "PrdNo")
      {


        for (let v of Rows) {

     //判断重复不能添加
     let Isjudge =  this.tableData.filter(function (item) {
		            if(item.PartNo == v.PrdNo){
		                return item;
		            }
		        })
     
     

    

   if(Isjudge.length==0)
   {
        this.multipleTable = v;
        let row = {
          PartNo: this.multipleTable.PrdNo,
          PartNamel: this.multipleTable.PrdName,
          SPC: this.multipleTable.SPC,
          UT: this.multipleTable.UT,
        
        
        };
        this.tableData.push(row);
        
   }
        
     }

      this.dialogPRDTVisible = false;
      } 
      
    
     
    },async handleEdit(scope) {
      // 修改

       let routeUrl = this.$router.push({
        path: "/MesBasic/BomDetailForm",//更改
         name: 'BomDetailForm1',
        query: { billID: scope.row.PartNo, IsPostBack: false },
      });
      window.open(routeUrl.href, "_top");

      this.inputName = row.PartNo;
   
      
    },handleUploadOpen(ploadDate)
    {

       for (let v of ploadDate) {


 for (let v of ploadDate) {


 let Isjudge =  this.tableData.filter(function (item) {
		            if(item.PartNo == v.PartNo){
		                return item;
		            }
		        })
     
     

    

   if(Isjudge.length==0)
   {


          this.tableData.push(v);

   }
       }
       }
    },
    handleClose()
    {
          this.$store.dispatch('tagsView/delView', this.$route)
// 返回上一步路由
      this.$router.go(-1)
    }, delData({ $index, row }) {
     this.$confirm('删除操作, 是否继续?', '提示', {
        confirmButtonText: "确认",
        cancelButtonText: "取消",
      })
        .then(async () => {
         
           
            this.tableData.splice($index, 1);
           


            if (row.ID == null) { //更改
              return false;
            }

            const result = await DeleteRowForm({
              ID: row.ID,
              billID: this.inputName,
              types: 1,
              IsPostBack: false,
            });

            this.$message({
              type: "success",
              message: result.msg,
            });
          
        })
        .catch((err) => {
          console.error(err);
        });
    },
        
  }
}
</script>

<style lang="scss" scoped>

.app-container {
  .EditObjs-table {
    margin-top: 30px;
  }

  .permission-tree {
    margin-bottom: 5px;
  }
}
.searchDialog ::v-deep .el-dialog__header {
  background: #409eff;
}
.searchDialog ::v-deep .el-dialog__title {
  color: #fff;
}
.searchDialog ::v-deep .el-dialog__headerbtn .el-dialog__close {
  color: #fff;
}
.infoColor {
  font-weight: bold;
  color: #909399;
}
.redColor {
  font-weight: bold;
  color: red;
}
.blueColor {
  font-weight: bold;
  color: #409eff;
}
.orangeColor {
  font-weight: bold;
  color: orange;
}
.greenColor {
  font-weight: bold;
  color: #67c23a;
}
</style>